/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package station;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.MulticastSocket;

/**
 *
 * @author safe
 */
public class Sender extends Thread {

    private final MulticastSocket multicastSocket;

    public Sender(MulticastSocket multicastSocket) {
        this.multicastSocket = multicastSocket;
    }

    /*
     *Nachricht aus Datenstruktur nehmen
     *Timestamp machen und rausschicken
     */
    @Override
    public void run() {
        try {
            int nextSlot = DataSlotBelegung.getOurNextSlot();
            if (nextSlot < 0) {
                DataSlotBelegung.calculateNextFreeSlot();
                nextSlot = DataSlotBelegung.getOurNextSlot();
            }
            long sleepTime = (nextSlot * 40) - DataAbweichungsZeit.getSendePuffer();
            if (sleepTime >= 0) {
                sleep(sleepTime);
            }

            DataSlotBelegung.calculateNextFreeSlot();
            int nextnewSlot = DataSlotBelegung.getOurNextSlot();

            DataNaechsteNachricht.setSlot(nextnewSlot);
            long sendingTime = DataNaechsteNachricht.setTimestamp();


            DatagramPacket data = DataNaechsteNachricht.getNextMessage();
            multicastSocket.send(data);
            if (DataEmpfangeneNachrichten.collisionDetect(sendingTime)) {
                DataSlotBelegung.setSlotFree(nextnewSlot);
                DataEmpfangeneNachrichten.setSendingCollision(true);
            }
        } catch (IOException ex) {
            System.out.println("IOException beim Sender: " + ex.getMessage());
        } catch (InterruptedException ex) {
            System.out.println("InterruptedException beim Sender: " + ex.getMessage());
        }

    }
}
